package com.jl.basicframework.viewModel;

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;

import com.jl.basicframework.httpservice.RetrofitUtils;
import com.jl.basicframework.listenerInterface.OnUiOperateListener;
import com.jl.basicframework.utils.dataProcessingUtils.FormatUtils;

import java.util.Map;

import okhttp3.RequestBody;

/***
 * @author 作者:姜澜
 * 时间:2021/12/30
 * 邮箱:316879104@pp.com
 * 类简述:viewModel抽象类原则上所有的viewModel都需要继承此类
 * 泛型:viewMode对应的API接口文件
 */
public abstract class BaseViewModel extends AndroidViewModel {


    /**
     * retrofit请求工具
     */
    protected RetrofitUtils retrofitUtils;
    /**
     * 网络请求参数
     */
    protected Map<String,Object> dataMap;

    /**
     * 数据变化监听
     */
    private OnUiOperateListener changeListener;

    public BaseViewModel(@NonNull Application application) {
        super(application);
        //获取工具单例
        retrofitUtils = RetrofitUtils.getInstances();
    }

    /**
     * 请求数据转RequestBody数据
     */
    protected RequestBody getRequestBody(Map<String,Object> dataMap){
        return FormatUtils.getRequestBody(FormatUtils.getJSON(dataMap));
    }

    /**
     * 请求数据转RequestBody数据
     */
    protected RequestBody getRequestBody(Object o){
        return FormatUtils.getRequestBody(FormatUtils.getJSON(o));
    }

    /**
     * 设置监听
     * @param changeListener
     */
    public void setChangeListener(OnUiOperateListener changeListener) {
        this.changeListener = changeListener;
    }

    /**
     * 取消数据监听
     */
    public void clearDataChangeListener(){
        changeListener = null;
    }

    /**
     * 关闭加载弹出框
     */
    public void loadDismiss(){
        if (null!=changeListener){
            changeListener.onLoadDismiss();
        }
    }


    /**
     * 启动加载弹出框
     * @param message 加载信息
     */
    public void loadShow(String message){
        if (null!=changeListener){
            changeListener.onLoadShow(message);
        }
    }

    /**
     * 启动提示弹出框
     * @param message 提示信息
     */
    void promptShow(String message){
        if (null!=changeListener){
            changeListener.onPromptShow(message);
        }
    }

    /**
     * 启动Toast
     * @param message toast信息
     */
    void toastShow(String message){
        if (null!=changeListener){
            changeListener.onToastShow(message);
        }
    }

    /**
     * 通知更新列表
     */
    void notifyRefreshList(){
        if (null!=changeListener){
            changeListener.onNotifyRefreshList();
        }
    }

    /**
     * 跳转指定页面
     * @param activityPath 页面路径
     * @param data 携带的参数
     */
    void toActivity(String activityPath,String data){
        if (null!=changeListener){
            changeListener.onToActivity(activityPath, data);
        }
    }

    /*************************************常规方法定义***********************************************/

    /***********************************网络请求方法定义**********************************************/




}
